package com.itheima.reggie.controller;

import com.itheima.reggie.common.Constant;
import com.itheima.reggie.common.ResultInfo;
import com.itheima.reggie.common.SmsTemplate;
import com.itheima.reggie.domain.User;
import com.itheima.reggie.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Map;
import java.util.concurrent.TimeUnit;

@RestController
@Slf4j
public class UserController {

    @Autowired
    private SmsTemplate smsTemplate;

    @Autowired
    private HttpSession session;

    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;
    //phone: "18611622426"
    //发送短信验证码
    @PostMapping("/user/sendMsg")
    public ResultInfo sendMsg(@RequestBody Map<String, String> map) {

        //1. 接收参数
        String phone = map.get("phone");

        //2. 生成一个验证码 todo 临时写死验证,等到上线再放开
//        String code = RandomUtil.randomNumbers(6);
        String code = "123";

        //3. 发送验证码 todo 等到生成环境再放开  为了省点钱
//        smsTemplate.sendSms(phone, code);

        //4. 记录下发送的验证码,方便后期对比
//        session.setAttribute("USER_PHONE_CODE" + phone, code);// phone:15612345678 ,123

        redisTemplate.opsForValue().set("USER_PHONE_CODE" + phone, code, 5, TimeUnit.MINUTES);
        //5, 返回信息
        return ResultInfo.success(null);
    }
//    登录实现
    @PostMapping("/user/login")
    public ResultInfo login(@RequestBody Map<String, String> map){
//        接收参数
        String phone = map.get("phone");
        String code = map.get("code");
//        先比对验证码 如果失败直接返回信息
//     获取域中的code
//        String phone_code = (String) session.getAttribute("USER_PHONE_CODE"+phone);

        String phone_code = (String)redisTemplate.opsForValue().get("USER_PHONE_CODE"+phone);
        if (StringUtils.isEmpty(phone_code) || !StringUtils.equals(code,phone_code)){
//            返回数据提醒报错
            return ResultInfo.error("验证码错误！");
        }
//        如果验证码没有错  判读当前用户是否在数据库中
       User user = userService.findUserByPhone(phone);
//        判断是否存在 如果不存在 则添加用户 存在则登录
        if (user!=null){
//            查看它的状态是否处于禁用状态,如果是,直接返回错误信息
        if (user.getStatus() == 0){
            return ResultInfo.error("当前用户已禁用,联系管理员进行解封110");
            }
        }else{
//            相反添加新用户
            User user1 = new User();
            user1.setPhone(phone);
            user1.setStatus(1);
//            保存
            userService.insertUser(user1);
        }
//        发送域数据
            session.setAttribute(Constant.SESSION_USER,user);
        return  ResultInfo.success(null);
    }

    //退出
    @PostMapping("/user/logout")
    public ResultInfo userLogout() {
        //注销
        session.invalidate();

        return ResultInfo.success(null);
    }
}